﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using BUS;
using DTO;
using QLVBDQ.UIControl;

namespace QLVBDQ
{
    /// <summary>
    /// Interaction logic for LapPhieuDichVu.xaml
    /// </summary>
    public partial class LapPhieuDichVu : UserControl
    {
        public LapPhieuDichVu()
        {
            InitializeComponent();
        }

        private void HoaDonMoi_Click(object sender, RoutedEventArgs e)
        {
            XoaHoaDon();
        }

        private void ThemDV_Click(object sender, RoutedEventArgs e)
        {
            ThemDichVu();
        }

        private void XoaDV_Click(object sender, RoutedEventArgs e)
        {
            XoaDichVu();
        }

        private void XuatHoaDon_Click(object sender, RoutedEventArgs e)
        {
            XuatPhieuDichVu();
        }

        private void Thoat_Click(object sender, RoutedEventArgs e)
        {

        }

        private void listSanPham_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {

        }

        private void maKhachHang_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Tab)
            {
                e.Handled = true;
                maDV.MakeFocus();
            }
        }

        private void maDV_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Tab)
            {
                e.Handled = true;
                soLuong.Focus();
            }
        }

        /// <summary>
        /// Khởi tạo mã phiếu lúc mở form
        /// </summary>
        void LoadMaPhieu()
        {
            maPhieu.Text = PhieuDichVu_BUS.Instance.LayMaPhieuDichVuMax();
        }

        /// <summary>
        /// Lấy ngày giờ mặc định
        /// </summary>
        void SetNgayMacDinh()
        {
            ngayLapPhieu.DisplayDate = DateTime.Now;
            ngayLapPhieu.SelectedDate = DateTime.Now;

            ngayThanhToan.DisplayDate = DateTime.Now;
            ngayThanhToan.SelectedDate = DateTime.Now;
        }

        /// <summary>
        /// Khởi tạo Tự động điền cho Mã Khách Hàng
        /// </summary>
        void KhoiTaoMaKhachHangAuto()
        {
            List<string> list = KhachHang_BUS.Instance.LayToanBoMaKhachHang();
            for (int i = 0; i < list.Count; i++)
                maKhachHang.AddItem(new AutoCompleteEntry(list[i], list[i]));
        }


        /// <summary>
        /// Khởi tạo tự động điền cho mã sản phẩm
        /// </summary>
        void KhoiTaoMaDichVuAuto()
        {
            List<string> list = DichVu_BUS.Instance.LayToanBoMaDichVu();
            for (int i = 0; i < list.Count; i++)
                maDV.AddItem(new AutoCompleteEntry(list[i], list[i]));
        }

        /// <summary>
        /// Tự động điền thông tin khách hàng khi biết mã khách hàng
        /// </summary>
        void TuDongDienThongTinKhachHang()
        {
            KhachHang_DTO kh = KhachHang_BUS.Instance.LayThongTinKhachHang(maKhachHang.Text);
            if (kh == null)
            {
                hoTen.Text = string.Empty;
                diaChi.Text = string.Empty;
                return;
            }
            hoTen.Text = kh.TenKhachHang;
            diaChi.Text = kh.DiaChi;
        }


        /// <summary>
        /// Tự động điền thông tin dịch vụ
        /// </summary>
        void TuDongDienThongTinDichVu()
        {
            DichVu_DTO dv = DichVu_BUS.Instance.LayThongTinDichVu(maDV.Text);
            if (dv == null)
            {
                maDV.Text = string.Empty;
                tenDV.Text = string.Empty;
                soLuong.Text = string.Empty;
                donGiaDV.Text = string.Empty;
                return;
            }

            tenDV.Text = dv.TenDichVu;
            donGiaDV.Text = dv.DonGia.ToString();
        }

        /// <summary>
        /// Lập hóa đơn mới
        /// </summary>
        void XoaHoaDon()
        {
            // Xác nhận
            if (MessageBox.Show("Có chắc bạn muốn xóa!", "Cảnh báo", MessageBoxButton.YesNo) == MessageBoxResult.No)
                return;

            listDV.Items.Clear();
            listDV.Items.Refresh();

            // Xóa sp
            maDV.Text = string.Empty;
            tenDV.Text = string.Empty;
            soLuong.Text = string.Empty;
            donGiaDV.Text = string.Empty;

            // Xóa khách hàng
            maKhachHang.Text = string.Empty;
            hoTen.Text = string.Empty;
            diaChi.Text = string.Empty;

            LoadMaPhieu();
            tongTien.Text = "0";
        }

        /// <summary>
        /// Thêm dịch vụ vào danh sách dịch vụ
        /// </summary>
        void ThemDichVu()
        {
            // Kiem tra
            if (maDV.Text == String.Empty)
            {
                MessageBox.Show("Bạn phải điền thông tin về dịch vụ");
                return;
            }
            if (soLuong.Text == string.Empty)
            {
                MessageBox.Show("Bạn phải điền thông tin về số lượng");
                return;
            }
            try
            {
                Int32.Parse(soLuong.Text);
                
            }
            catch (FormatException e)
            {
                MessageBox.Show("Số lượng phải là chữ số!");
            }

            // Thêm vào list
            DichVu_DTO sp = new DichVu_DTO(maDV.Text, tenDV.Text, long.Parse(donGiaDV.Text));
            sp.STT = listDV.Items.Count + 1;
            sp.SoLuong = Int32.Parse(soLuong.Text);
            sp.ThanhTien = sp.SoLuong * sp.DonGia;
            listDV.Items.Add(sp);
            listDV.Items.Refresh();

            // Cho nó về empty
            maDV.Text = string.Empty;
            tenDV.Text = string.Empty;
            soLuong.Text = string.Empty;
            donGiaDV.Text = string.Empty;
            
            TinhTongTien();

            MessageBox.Show("Thêm Dịch vụ thành công!");
            maDV.MakeFocus();
        }

        /// <summary>
        /// Tính tổng tiền và cập nhật vào textbox
        /// </summary>
        private void TinhTongTien()
        {
            // Tinh tong tien
            long tongtien = 0;
            for (int i = 0; i < listDV.Items.Count; i++)
                tongtien += ((DichVu_DTO)listDV.Items[i]).ThanhTien;
            tongTien.Text = tongtien.ToString();
        }

        /// <summary>
        /// Hàm xóa dịch vụ trong list
        /// </summary>
        void XoaDichVu()
        {
            // Kiểm tra xóa sản phẩm
            if (listDV.SelectedIndex == -1)
            {
                MessageBox.Show("Bạn phải chọn dịch vụ để xóa");
                return;
            }

            // XÓa ngay và luôn
            listDV.Items.Remove(listDV.SelectedItem);

            TinhTongTien();
            MessageBox.Show("Xóa thành công");
        }

        /// <summary>
        /// Xuất phiếu dịch vụ
        /// </summary>
        void XuatPhieuDichVu()
        {
            // Xác nhận
            if (MessageBox.Show("Có chắc bạn muốn xuất phiếu!", "Cảnh báo", MessageBoxButton.YesNo) == MessageBoxResult.No)
                return;

            // Thêm phiếu bán hàng
            long tongTien = 0;
            for (int i = 0; i < listDV.Items.Count; i++)
                tongTien += ((DichVu_DTO)listDV.Items[i]).ThanhTien;

            // Thêm phiếu bán hàng
            DateTime ngaDk = ngayLapPhieu.SelectedDate.Value;
            DateTime ngaGiao = ngayThanhToan.SelectedDate.Value;
            if (!PhieuDichVu_BUS.Instance.ThemPhieuDichVuMoi(new PhieuDichVu_DTO("----", ngaDk.Year, ngaDk.Month, ngaDk.Day,
                ngaGiao.Year, ngaGiao.Month, ngaGiao.Day, maKhachHang.Text, tongTien
                )))
            {
                MessageBox.Show("Them phiếu ko thành công");
                return;
            }

            // Thêm chi tiết phiếu bán hàng
            for (int i = 0; i < listDV.Items.Count; i++)
            {
                DichVu_DTO sp = (DichVu_DTO)listDV.Items[i];

                ChiTietPhieuDV_DTO phieu = new ChiTietPhieuDV_DTO("---", maPhieu.Text, sp.MaDichVu, sp.SoLuong, sp.DonGia);
                ChiTietPhieuDV_BUS.Instance.ThemChiTietPhieuDichVu(phieu);
                
            }

            MessageBox.Show("Thêm phiếu bán hàng thành công!");
        }

        private void maKhachHang_LostFocus(object sender, RoutedEventArgs e)
        {
            if (maKhachHang.IsElementFocused())
                return;

            TuDongDienThongTinKhachHang();
        }

        private void maDV_LostFocus(object sender, RoutedEventArgs e)
        {
            if (maDV.IsElementFocused())
                return;

            TuDongDienThongTinDichVu();
        }

        private void UserControl_Loaded_1(object sender, EventArgs e)
        {
            LoadMaPhieu();
            SetNgayMacDinh();
            KhoiTaoMaKhachHangAuto();
            KhoiTaoMaDichVuAuto();
            maKhachHang.MakeFocus();
        }

    }
}
